package xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.List;

import static java.lang.System.out;

/*
xml读写解析
 */
public class test {

    public static  void main(String[] args) throws DocumentException {
        //1、定义一个xml解析文档
        SAXReader sxReader=new SAXReader();
        //获取一个document对象
        Document document = sxReader.read(new File("resources/demo.xml"));
        //获取xml的根元素
        Element rootElement = document.getRootElement();
        //获取的是当前节点内容文本
        String roottext1 = rootElement.getText();
        //获取节点的名字
        String roootName = rootElement.getName();
        String rootQuali = rootElement.getQualifiedName();
        //获取当前节点的子孙节点所有文本内容连接成字符串
        String rootStringValue=rootElement.getStringValue();
        out.println(rootStringValue);  //进行测试
        
        
        //2、把根元素中student标签放到list
        List<Element> studentList = rootElement.elements("student");
        for (Element el:studentList) {
            out.println(el.element("name").getText());
            out.println(el.element("age").getText());
        }


        //3、xml里面有属性时候的取值
        String color = rootElement.attribute("color").getValue();
        out.println(color);
        out.println("——————————————————分割——————————————————————");
        //4、xpath路径标识符(需要导入jaxen和xpath包使用；需要学习路径的使用)
        String xpath="/students/student";
        //获取student节点下的姓名
        List<Element> elList = document.selectNodes(xpath);
        for (Element el:elList){
            out.println(el.element("name").getText());
        }

        out.println("——————————————————分割——————————————————————");
        //5、创建节点
        Document dc= DocumentHelper.createDocument();
        dc.addComment("xml注释");
        //创建一个名为students的节点，第一个节点，所以是根节点;如果再去创建就会报错
        Element  el=dc.addElement("students");
        //在根节点下继续创建一个节点student
        Element studentEl = el.addElement("student");
        //给student添加属性
        studentEl.addAttribute("id","10000");
        //继续给student添加子节点
        Element nameEl = studentEl.addElement("name");
        //添加内容
        nameEl.setText("小李");
        Element ageEl = studentEl.addElement("age");
        ageEl.setText("22");

        //用于格式化xml内容和设置头部标签
        OutputFormat format=OutputFormat.createPrettyPrint();
        //设置xml文档为utf-8
        format.setEncoding("UTF-8");
        Writer out1;
            //创建一个输出流
        try {
            out1= new FileWriter("resources/create.xml");
            //创建一个dom4j创建xml的对象
            XMLWriter xmlWriter = new XMLWriter(out1, format);
            //调用write方法将doc文档写到指定路径
            xmlWriter.write(dc);
            xmlWriter.close();
            System.out.println("生成xml文件");
        } catch (IOException e) {
            System.out.println("xml文件生成失败");
            e.printStackTrace();
        }
    }
}

